package com.rui.shangXueTang.hashTable;

/**
 * @author : [锐神NO.3]
 * @version : [v1.0]
 * @className : HashTable
 * @createTime : [2022/2/16 16:26]
 * @description : [哈希表]
 */

@SuppressWarnings("all")
public class HashTable {

    private StudentLinkedList[] studentLinkedLists;

    private int size;

    /**
     * 初始化哈希表
     * @param size 哈希表的长度
     */
    public HashTable(int size) {
        this.size = size;
        studentLinkedLists = new StudentLinkedList[size];

        for(int i = 0 ; i < size ; i++){
            studentLinkedLists[i] = new StudentLinkedList();
        }
    }

    public int hashCodes(int sid){
        return sid % size;
    }

    /**
     * 添加学生
     */
    public void add(Student student){
        //决定了数组中的下标
        int hashVal = hashCodes(student.id);

        //添加到指定的链表中
        studentLinkedLists[hashVal].add(student);
    }

    /**
     * 查看哈希表中的元素
     */
    public void list(){
        for(int i = 0 ; i < size ; i++){
            System.out.println("第" + i + "个链表:");
            studentLinkedLists[i].list(i);
        }
    }

    /**
     * 根据学生编号查询
     */
    public void findById(int sid){
        int hashVal = hashCodes(sid);
        Student student = studentLinkedLists[hashVal].findById(sid);
        if(student == null){
            System.out.println("没有该学生");
        }else {
            System.out.println("在第" + hashVal + "个链表中找到该学生");
            System.out.println("学生信息如下:");
            System.out.println(student);
        }
    }
}
